// 给你一个二叉树，请你返回其按 层序遍历 得到的节点值。 （即逐层地，从左到右访问所有节点）。


// 广度优先+优化
// 执行用时：
// 4 ms
// , 在所有 C++ 提交中击败了
// 78.69%
// 的用户
// 内存消耗：
// 12.9 MB
// , 在所有 C++ 提交中击败了
// 8.63%
// 的用户

#include<bits/stdc++.h>
#include<string>
#include<vector>
#include<unordered_map>
#include<set>
#include<queue>
using namespace std;

struct TreeNode {
     int val;
     TreeNode *left;
     TreeNode *right;
     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
class Solution {
public:
    vector<vector<int>> res;
    queue<TreeNode*> que1;
    void bfs(){
        if(que1.empty()){
            return;
        }
        int cnt = que1.size();
        vector<int> res_temp;
        while(cnt){
            TreeNode* temp = que1.front();
            que1.pop();
            if(temp->left!=NULL){
                que1.push(temp->left);
            }
            if(temp->right!=NULL){
                que1.push(temp->right);
            }
            res_temp.push_back(temp->val);
            cnt--;
        }
        res.push_back(res_temp);
        bfs();
    }
    vector<vector<int>> levelOrder(TreeNode* root) {
        if(root == NULL){
            return res;
        }
        else{
            que1.push(root);
            bfs();
        }
        return res;
    }
};